# -*- coding: utf-8 -*-
"""
Created on Wed Aug 16 19:57:32 2023

@author: skunk69
"""

import json

chinese_name = u'舒适状况量表'
english_name = 'General Comfort Questionnaire'
abbreviation = 'GCQ'
category = u'生活质量与满意度量表'

outline = u"""舒适度是指个体在特定情境下感受到的心理和生理上的舒适或不适。通过测量舒适度，研究者和临床医师可以了解个体在面临压力和挑战时的应对能力，为心理干预和支持提供依据。《舒适状况量表》（General Comfort Questionnaire, GCQ）是一种用于评估个体在不同情境下的舒适度的心理测量工具。GCQ的具体项目和结构可能因研究者和研究目的而有所不同。一般来说，GCQ包括多个维度，如心理舒适度、生理舒适度、环境舒适度等。"""

instruction = u"""这是一份关于舒适状况的量表。请根据您对各个项目所描述的情况同意的程度在“非常不同意”、“不同意”、“同意”和“非常同意”中选择一项。答案无所谓好坏对错，请根据您的实际情况选择。"""

with open('GCQ.txt','r',encoding='utf-8') as f:
    lines = f.readlines()
    f.close()

items = {}
for key,line in enumerate(lines):
    _,value = line.strip().split('）',maxsplit=1)
    items[key+1] = value

reverse_items = [2,3]+list(range(7,18))+[19,21,22,25,26,27,30]
scales = [u'生理舒适',u'心理舒适',u'社会文化舒适',u'环境舒适']
scales_items = [
    [2,9,13,16,17],# 生理舒适
    [3,4,5,12,15,18,22,24,26,28],# 心理舒适
    [1,6,8,10,23,25,29,30],# 社会文化舒适
    [7,11,14,19,20,21,27],# 环境舒适
    ]

# check scales_items
print(f'scale length={[len(l) for l in scales_items]}')

check = []
for l in scales_items:
    check = check+l
print(f'len(check)={len(check)}')

# complementary set
check_set = {i for i in sorted(check)}^{i for i in range(1,31)}
print(f'complementary set= {check_set}')

factors = []
factors_scales = []
rating = [u'非常不同意',u'不同意',u'同意',u'非常同意']
score_rules = list(range(1,5))

contents = {
    'instruction':instruction,
    'items':items,
    'reverse_items':reverse_items,
    'scales':scales,
    'scales_items':scales_items,
    'factors':factors,
    'factors_scales':factors_scales,
    'rating':rating,
    'score_rules':score_rules       
    }

implementation = u"""《舒适状况量表》属于一个自评量表。"""

reliability = u"""正式的测量样本为北京协和医院的胸外科和心胸外科术后患者。总的α值为0.92，生理维度、心理维度、社会文化维度和环境维度的α值分别为0.85，0.82，0.53，0.78。"""
validity = u"""研究分两阶段进行，第一阶段由专家小组收集意见，确定GCQ的内容效度，第二阶段问卷调查，测试GCQ的信度。根据测试结果，对个别条目进行了修改。"""
measurements = {'reliability':reliability,'validity':validity}

interpretation = u"""首先将反向题目反向计分，然后将各维度题目相加得到各维度分，由维度分之和得到总分。总分反映了被试者舒适程度的总体状况。
本量表最低分30分，最高分120分，分数越高说明越舒适。总分小于60分为低度舒适，总分在60~90分为中度舒适，总分大于90分为高度舒适。"""

applications = u"""由于该量表尚缺乏其他信度和效度的检测，并且仅对胸外科手术后患者的舒适进行了测量，实际应用效果尚有待后续研究的检验。"""

this_scale = {
    'chinese_name':chinese_name,
    'english_name':english_name,
    'abbreviation':abbreviation,
    'category':category,
    'outline':outline,
    'contents':contents,
    'implementation':implementation,
    'measurements':measurements,
    'interpretation':interpretation,
    'applications':applications    
    }

with open(abbreviation+'.json','w+',encoding='utf-8') as f:
    json.dump(this_scale,f,indent=2,ensure_ascii=False)